import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(String[] args) throws InterruptedException, IOException {
//        test0();
//        test1();
//        test2();
//        test3();
//        test4();
        test5();
    }

    private static void test5() throws InterruptedException, IOException {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");

        // 获取输入框元素
        WebElement input = driver.findElement(By.cssSelector("#kw"));
        // 输入张三
        input.sendKeys("张三");
        // 点击
        driver.findElement(By.cssSelector("#su")).click();

        // 等待浏览器加载
        Thread.sleep(2000);

        Date date = new Date();
        String time = date.toString().replaceAll(" ","").replaceAll(":","");
        String fileName = ("D:/" + time + ".png");
        // 截图
        File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshotAs, new File(fileName));

    }


    private static void test4() throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com/");
        // 获取第一个窗口句柄
        String firstHandle = driver.getWindowHandle();
        System.out.println("当前句柄为: " + firstHandle);

        // 找到 "新闻" 元素
        WebElement newsElement = driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));
        // 点击
        newsElement.click();

        // 获取第二个窗口句柄
        String secondHandle = driver.getWindowHandle();
        System.out.println("当前句柄为: " + secondHandle);

        // 获取到浏览器的所有句柄
        Set<String> allHandle = driver.getWindowHandles();
        // 创建一个空字符串, 下面遍历到最后一个句柄时, 把句柄赋值给 target
        String target = "";
        // 遍历当前浏览器所有的窗口句柄
        for (String handle : allHandle) {
            // foreach 执行结束, target 会拿到Set中浏览器最后一个窗口句柄
            target = handle;
        }

        // 将窗口句柄切换到最后一个窗口(即,让程序切换窗口)
        driver.switchTo().window(target);

        // 等待浏览器加载
        Thread.sleep(2000);

        // 找到 "新闻" 窗口页的输入框
        WebElement input = driver.findElement(By.cssSelector("#ww"));

        // 往输入框中输入 "软件测试" 文本
        input.sendKeys("软件测试");

    }

    private static void test3() throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");

        // 找到输入框元素
        WebElement input = driver.findElement(By.cssSelector("#kw"));
        // 输入 "张三"
        input.sendKeys("张三");

        // 这里不定位 "百度一下" 按钮了, 采用按 "回车" 的方法去搜索
        input.sendKeys(Keys.ENTER);

        // 模拟鼠标操作(需要把驱动driver放进去作为参数)
        Actions actions = new Actions(driver);

        // 等待浏览器加载
        Thread.sleep(3000);

        // 找到 "图片" 元素
        WebElement image = driver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        // 鼠标移动到 "图片" 元素上
        actions.moveToElement(image);
        // 右击
        actions.contextClick().perform();
    }


    private static void test2() throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");
        // 找到 "新闻" 元素
        WebElement input = driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));



        // 找到 "百度一下" 按钮
        WebElement button = driver.findElement(By.cssSelector("#su"));
        // 模拟点击操作
        button.click();

        // 等待浏览器加载
        Thread.sleep(3000);

//        // 浏览器后退操作
//        driver.navigate().back();
//
//        // 前进操作
//        driver.navigate().forward();

//        ((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=10000");

        // 获取当前页面url
        String url = driver.getCurrentUrl();
        System.out.println(url);
    }

    public static void test0() {
        //驱动程序管理的⾃动化
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");

        // 定位百度搜索框
        // 1.使用 css选择器
        WebElement inputCss = webDriver.findElement(By.cssSelector("form > span > #kw"));
        // 2.使用XPath
        WebElement inputXPath = webDriver.findElement(By.xpath("//form/span[1]/input"));

        if (inputCss != null) {
            System.out.println("Css成功定位到元素");
        }
        if (inputXPath != null) {
            System.out.println("XPath成功定位到元素");
        }

    }

    public static void test1() throws InterruptedException {
        // 创建一个驱动(这个操作相当于手动打开驱动程序)
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        // 1.找到输入框元素
        WebElement input = webDriver.findElement(By.cssSelector("form > span > #kw"));
        // 向输入框中输入 "软件测试" 文本
        input.sendKeys("软件测试");

        // 2.找到 "百度一下" 按钮元素
        WebElement baiduButton = webDriver.findElement(By.cssSelector("form > span > #su"));
        // 点击按钮
        baiduButton.click();
        //Thread.sleep(3000);
        webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.HOURS);
        // 找到搜索结果中所有带 "软件测试" 字样的条目(定位页面多个元素,使用 findElements() 加s的方法)
        List<WebElement> elements = webDriver.findElements(By.xpath("//*[text()=\"软件测试\"]"));
        for (WebElement element : elements) {
            String text = element.getText();
            if (text.equals("软件测试")) {
                System.out.println("1");
            }
        }
        webDriver.quit();
    }
}
